#ifndef _COMPONENT_H
#define _COMPONENT_H

#include <string>

#ifdef GALLIUMENGINE_DLL 
#define GALLIUMENGINE_API __declspec( dllexport )
#else
#define GALLIUMENGINE_API __declspec( dllimport )
#endif

namespace GalliumEngine
{
	class GameObject;

	class Component
	{
	private:
		std::string m_id;
		std::string m_family;
		GameObject* m_object;
	public:

		/// <summary>Create a new Component.</summary>
		GALLIUMENGINE_API Component(void);

		/// <summary>Destroy the Component.</summary>
		GALLIUMENGINE_API ~Component(void);

		/// <summary>Sets the Component Id.</summary>
		/// <param type="std::string" name="id">The id to set.</param>
		GALLIUMENGINE_API void setId(std::string);

		/// <summary>Gets the Component Id.</summary>
		/// <returns>The Id.<returns>
		GALLIUMENGINE_API std::string getId();

		/// <summary>Sets the Family Id.</summary>
		/// <param type="std::string" name="id">The id to set.</param>
		GALLIUMENGINE_API void setFamily(std::string);

		/// <summary>Gets the Component Family.</summary>
		/// <returns>The Family.<returns>
		GALLIUMENGINE_API std::string getFamily();

		/// <summary>Sets the GameObject parent.</summary>
		/// <param type="GameObject*" name="value">The GameObject parent to set.</param>
		GALLIUMENGINE_API void setGameObject(GameObject*);

		/// <summary>Gets the GameObject parent.</summary>
		GALLIUMENGINE_API GameObject* getGameObject();

		/// <summary>Initialize the Component.</summary>
		GALLIUMENGINE_API virtual void initialize();

		/// <summary>Deinitialize the Component.</summary>
		GALLIUMENGINE_API virtual void deinitialize();
	};

}

#endif